/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package rosic.forms;

import com.sun.lwuit.Dialog;
import com.sun.lwuit.Display;
import com.sun.lwuit.Form;
import com.sun.lwuit.events.ActionEvent;
import com.sun.lwuit.events.ActionListener;
import java.util.Vector;
import javax.microedition.midlet.*;
import rosic.WebServices.IServiciosWEB;
import rosic.GPS.GPSMock;
import rosic.GPS.IServiciosGPS;
import rosic.GoogleMaps.GoogleMaps;
import rosic.GoogleMaps.Marcador;
import rosic.GoogleMaps.RutaMapa;
import rosic.WebServices.WebServicesMock;
import rosic.forms.VerDelitosTipoForm;
import rosic.mapCanvas.MapCanvas;

/**
 * @author David
 */
public class MidletPrincipal extends MIDlet implements ActionListener {

    public final static String key = "ABQIAAAAL0T8hcdlFsbtohWcreq7ART2yXp_ZAY8_ufC3CFXhHIE1NvwkxQS5-U2FpwnvkwPeOMSYHCqPCfVvg";
    public final static String MAPA_SATELITAL = "satellite";
    public final static String MAPA_CALLES = "terrain";
    private GoogleMaps gm;
    /**
     * latitud obtenida del gps
     */
    private double latitud;
    /**
     * longitud obtenida del gps
     */
    private double longitud;
    /**
     * zomm del mapa de google
     */
    private int zoom = 15;
    private MapCanvas canvas;
    private MenuPrincipalForm menuPrincipal;
    /**
     * vector con los formularios usados por el cliente
     */
    private Vector previousForms;
    /**
     * clase que da los servicios de ubicaición
     */
    private IServiciosGPS serviciosGPS;

    private InseguridadLugarForm inseguridadLugarForm;
    /**
     * clase que da la comunicación con los Wbe services
     */
    private IServiciosWEB serviciosWeb;

    int numPreviousForm;
    private String login;

    


    public void startApp() {

        Display.init(this);

        try {
            com.sun.lwuit.util.Resources res = com.sun.lwuit.util.Resources.open("/theme.res");
            com.sun.lwuit.plaf.UIManager.getInstance().setThemeProps(res.getTheme(res.getThemeResourceNames()[0]));
        } catch (java.io.IOException ex) {
            ex.printStackTrace();
        }
        numPreviousForm=-1;
        serviciosGPS = new GPSMock();
        latitud = serviciosGPS.darLatidud();
        longitud= serviciosGPS.darLongitud();
        serviciosWeb = new WebServicesMock();

        previousForms = new Vector();

       AutenticacionForm autForm = new AutenticacionForm(this);
       autForm.getAutenticacionForm().show();

        /*menuPrincipal = new MenuPrincipalForm(this);
        menuPrincipal.getMenuPrincipalForm().show();*/


        /*  try {


        gm = new GoogleMaps(key);
        String tipoMapa = MAPA_SATELITAL;
        Form f = new Form("Hello, LWUIT!");
        f.setLayout(new GridLayout(1, 1));
        latitud=4.658726050663224;
        longitud=-74.0947151184082;

        Image map;
        map = gm.retrieveStaticImage(500, 500, latitud, longitud, zoom, "jpg", tipoMapa);

        canvas = new MapCanvas(this, map, 500, 500);

        f.addComponent(canvas);
        f.repaint();
        f.show();

        Command exitCommand = new Command("Exit");

        f.addCommand(exitCommand);

        f.setCommandListener(this);

        } catch (IOException ex) {
        ex.printStackTrace();
        }*/
    }

    /**
     * muestra el formulario anterior
     */
    public void showPreviousForm() {
        if (!previousForms.isEmpty()) {
            Form previousForm = (Form) previousForms.elementAt(numPreviousForm);
            numPreviousForm--;
            previousForm.show();
        }

    }

    /**
     * agrega un formulario al vector para que pueda ser mostrado al momento en
     * que el usuario haga clik en volver.
     * @param previousForm
     */
    private void setPreviousForm(Form previousForm) {
        previousForms.addElement(previousForm);
        numPreviousForm++;
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }

    public void actionPerformed(ActionEvent arg0) {
        notifyDestroyed();
    }
    /**
     * muestra el formulario de la inseguridad de lugares cercanos al usuario
     */
    void mostrarInseguridadLugarForm(Form formularioAnterior) {
        setPreviousForm(formularioAnterior);

        String nivelInseguridad = serviciosWeb.darNivelInseguridad(latitud, longitud);
        String barrio = serviciosWeb.darBarrio(latitud, longitud);
        String[] delitos = serviciosWeb.darListaDelitos(latitud, longitud);

        inseguridadLugarForm = new InseguridadLugarForm(this , nivelInseguridad, barrio, delitos);

        

        inseguridadLugarForm.setNivelInseguridad(nivelInseguridad);

        inseguridadLugarForm.getInseguridadForm().show();
        
        
    }

    void mostrarMapaForm(Form formularioAnterior) {
        setPreviousForm(formularioAnterior);

        MostrarMapaForm mapaForm = new MostrarMapaForm(this);

        mapaForm.getMapaForm().show();
    }
    /**
     *
     * @param mapaForm
     * @param tipoMapa
     */
    void mostrarMapa(Form formularioAnterior, String tipoMapa) {
        setPreviousForm(formularioAnterior);
       /* if(tipoMapa.equals(MAPA_CALLES)){
            zoom = 15;
        }*/
       // Marcador marc = new Marcador(latitud+0.001, longitud+0.0005, 'c');

        Vector marcadores = serviciosWeb.darMarcadoresTodos(latitud, longitud);
        MapaForm mapa = new MapaForm(this, latitud, longitud, zoom, marcadores, tipoMapa);

        mapa.getMapaForm().show();

    }

    void mostrarVerEstadoTraficoForm(Form formularioAnterior) {
        setPreviousForm(formularioAnterior);
        String[] viasPosibles = serviciosWeb.darViasPosbiles();
        VerEstadoTraficoForm verEstadoTrafico= new VerEstadoTraficoForm(this, viasPosibles);
        verEstadoTrafico.getVerEstadoTraficoForm().show();

    }

    void mostrarMapaTrafico(Form formularioAnterior, String viaEscogida) {
        setPreviousForm(formularioAnterior);

        RutaMapa ruta = serviciosWeb.darRuta(viaEscogida);

        MapaTraficoForm mapaTrafico = new MapaTraficoForm(this, zoom, MAPA_CALLES, ruta);
        mapaTrafico.getMapaTrafico().show();
    }

    void mostrarVerDelitosTipoForm(Form formularioAnterior) {
        setPreviousForm(formularioAnterior);

        String[] delitosPosibles = serviciosWeb.darDelitosPosibles();

        VerDelitosTipoForm verDelitos= new VerDelitosTipoForm(this, delitosPosibles);

        verDelitos.getVerDelitosForm().show();
    }

    void mostrarMapaDelitos(Form formularioAnterior, String tipoEscogido, String tipoMapa) {
        setPreviousForm(formularioAnterior);

        Vector marcadores = serviciosWeb.darMarcadoresPorTipo(latitud, longitud, tipoEscogido);

         MapaForm mapa = new MapaForm(this, latitud, longitud, zoom, marcadores, tipoMapa);

        mapa.getMapaForm().show();

    }

    void autenticar( String login, String password) {

          this.login = login;
         String resp = serviciosWeb.autenticar(login, password);

         if(resp.equalsIgnoreCase("EXITO")){
             menuPrincipal = new MenuPrincipalForm(this);
             menuPrincipal.getMenuPrincipalForm().show();
         }else{
             Dialog.show("Error", "Usted no esta registrado en el sistema", "OK", null);
         }
    }

    void mostrarBuscarRutaSeguraForm(Form formularioAnterior) {
        setPreviousForm(formularioAnterior);

        BuscarRutaSeguraForm form = new BuscarRutaSeguraForm(this);
        form.getForm().show();
    }

    void mostrarRutaMisDestinosForm(Form formularioAnterior) {

        
        String[] destinos = serviciosWeb.darDestinosMisDestinos(login);
        if(destinos[0].equals("NO")){
            Dialog.show("Error", "Usted no ha registrado ninguna ruta preferida", "OK", null);
        }else{
            setPreviousForm(formularioAnterior);
            RutaMisDestinosForm form = new RutaMisDestinosForm(this, destinos);
            form.getForm().show();
        }


        
    }

    void mostrarRutaSeguraA(Form formularioAnterior, String destino) {
          setPreviousForm(formularioAnterior);
          RutaMapa ruta = serviciosWeb.darRutaSegura(destino, latitud, longitud);

          zoom=12;
           MapaForm mapa = new MapaForm(this, latitud, longitud, zoom, null, MAPA_CALLES);
           mapa.setRuta(ruta);


           
        mapa.getMapaForm().show();

        zoom=15;
    }

    public void mostrarRutaSeguraB(Form formularioAnterior, double latitudDestino, double LongitudDestino) {
          setPreviousForm(formularioAnterior);
          RutaMapa ruta = serviciosWeb.darRutaSegura(latitud, longitud, latitudDestino, LongitudDestino);

          zoom=12;
           MapaForm mapa = new MapaForm(this, latitud, longitud, zoom, null, MAPA_CALLES);
           mapa.setRuta(ruta);



        mapa.getMapaForm().show();

        zoom=15;
    }

    void mostrarEscogerRutaMapaForm(Form formularioAnterior) {
          setPreviousForm(formularioAnterior);
          // zoom=12;

            Vector marcadores = serviciosWeb.darMarcadoresPorTipo(latitud, longitud, null);
          EscogerRutaEnMapaForm form = new EscogerRutaEnMapaForm(this, latitud, longitud, zoom, marcadores, MAPA_CALLES);
          form.getMapaForm().show();
       zoom=15;
        
    }
}
